
'''
使用面向对象的方式，来模拟一个士兵射击的过程

士兵  属性 ：姓名  枪（开始的时候不配枪，后期的时候可以发枪）
    方法：射击

枪的类 ： 属性 名字，子弹的数量
        方法：装填子弹，，枪能开火

'''

class Soldier:
    def __init__(self ,name):
        self.name = name
        self.gun = None

    def get_gun(self,gun):
        self.gun = gun
        print(f'拿到了一个二手的{self.gun}')
    def be_loaded(self):
        self.gun.add_bullets(10)
    def shooting(self):
        '''
        射击的方法
        :return:
        '''
        #先判断一下士兵有没有枪 ，没有枪去获取枪
        if self.gun is None:
            print(f'{self.name}还没有枪，去获取')
        elif not self.gun.bullets_count:
            #再判断枪里有没有子弹，没有子弹，去装填子弹
            print(f'{self.gun.name}还没有子弹')
        else:
            #上述条件都满足了，就可以射击了
            print('瞄准了一个敌人')
            self.gun.fire()
class Gun:
    def __init__(self,name):
        self.name = name
        self.bullets_count = 0

    def add_bullets(self,val):
        '''
        添加子弹的方法
        :param val:  添加子弹数量
        :return:
        '''
        self.bullets_count += val
        print(f'咔咔,【{self.name}】添加了【{val}】颗子弹！')

    def fire(self):
        '''
        枪开火
        :return:
        '''
        self.bullets_count -= 1
        print(f'嘭~~,{self.bullets_count}')
    def __str__(self):
        return f'{self.name}'
xsd = Soldier('许三多')
m99 = Gun('巴雷特')
xsd.get_gun(m99)
xsd.shooting()
xsd.be_loaded()
xsd.shooting()
